ФАЙЛЫ.

 

Место, где на диске сохраняется та или иная информация, называ­ется файлом. Файлов на диске множество. Каждая игра, и вообще любая программа, сохраняется в своем файле. Сколько игр, столько и файлов. Говорят, что когда происходит сохранение информации в файле, то информация выводится или записывается из оперативной памяти в файл, а когда игра или другая программа читает эту инфор­мацию из файла, то говорят, что информация вводится или загружа­ется из файла в оперативную память.

 

В Visual Basic существует несколько типов файлов. Мы познако­мимся с самым простым из них - текстовым файлом. При работе с текстовым файлом удобно во­ображать, что носитель не диск, состоящий из дорожек, а подобен листу бумаги или экрану монитора, файл же - это строки информа­ции на этом листе или экране. Запись в файл и считывание из файла осуществляются магнитной головкой, которая может двигаться по строкам файла только строго последовательно, не пропуская ни стро­ки, подобно авторучке, когда вы пишете письмо, или глазу, когда его читаете. Но у магнитной головки нет свободы глаза или авторучки, которые могут "прыгать" по листу, как хотят. Головка движется стро­го последовательно, не пропуская ни символа, поэтому такие файлы еще называют файлами с последовательным доступом.

Данные в текстовых файлах могут быть числами, строками или иметь другой тип.

Сейчас на примерах мы научимся работать с текстовыми фай­лами.

 

Пример 1.

Записать слово Улица и число 200 на магнитный диск С: в текстовый файл с именем proba.txt, располагающийся в папке VB.

Решение. Прежде всего вы должны убедиться, что такая папка дей­ствительно существует по указанному адресу. Файла же там может и не быть. Затем придумаем файлу Proba.txt номер, которым мы будем пользоваться в программе. Пусть это будет 1.

Прежде чем начать работать с файлом, он должен быть открыт. При этом компьютер выполняет определенные подготовительные действия для работы с файлом. Вот как выглядит оператор, откры­вающий текстовый файл для записи:

Оператор:   Open         "C:\VB\Proba.txt"     For    Output     As     #1

Перевод:    Открыть файл    "C:\VB\Proba.txt"     для    вывода     как     №1

Если файл раньше не существовал, то он создается. Если файл от­крывается для записи, то магнитная головка перемещается в начало файла. Это означает, как вы можете догадаться, что если в файле было раньше что-то записано, то все сотрется. Вот программа:

Private Sub Command1_Click()

'Открыть для записи файл Proba.txt в папке VB диска С под номером 1

Open "C:\VB\Proba.txt" For Output As #1

Write #1, "Улица"     'Записать в файл № 1 строку "Улица"

Write #1,200       'Записать в файл № 1 в следующую строку число 200

Close #1      'Закрыть файл №1

Еnd Sub

Вы видите, что собственно запись осуществляется оператором Write. После работы с файлом его нужно закрыть оператором Close.

Давайте убедимся, что все действительно правильно записалось.
Для этого выйдем из
Visual Basic в Windows, найдем нужную папку и
обнаружим, что там действительно находится файл
Proba.txt. Чтобы
заглянуть в него, щелкните по нему дважды мышкой, он откроется
Программой
Notepad - и вы увидите, что он содержит 2 строки:       

"Улица"

200 

Если вместо двух операторов Write вы напишете один: Write #1, "Улица", 200  в файл будет записана 1 строка:

    "Улица",200

Если вы не хотите стирать содержимое файла, а просто хотите до­писать что-нибудь в его конец, то вместо слова Output в операторе Open нужно использовать слово Append.

Удобно держать текстовый файл, в который ваша программа со­храняет свои данные, в той же папке, где находятся файлы вашего проекта. В этом случае возникает проблема: при переносе папки с проектом в другое место диска изменяется ее адрес, а значит, и адрес файла данных. В операторе же Open указан старый адрес. Visual Basic выдаст сообщение об ошибке. В этой ситуации нужно  в операторе Open дать понять компьютеру, что файл на­ходится именно в папке с файлами проекта: Open App.Path & "\Proba.txt" For...

App.Path - это адрес папки вашего проекта, где бы он ни путешест­вовал.

Информация в наш файл может записываться только по порядку, последовательно. Мы не можем записать что-то сперва в начало фай­ла, потом в конец, потом в середину. То же самое относится и к счи­тыванию, о котором сейчас пойдет речь.

 

 

Пример 2. В файле Proba1.txt в папке проекта записаны следующие

строки:

1999

"Азия"                                                        

  "Африка", 2010

 

Вывести третью строку на экран монитора. Вот программа: Private Sub Command3_Click()

Dim a1 As Integer   'Четыре переменные в оперативной памяти,

Dim а2 As String                 которые будут загружены данные

Dim аЗ As String                       'из первых трех строк '

Dim а4 As Integer                          'файла

'Открыть для чтения под номером 1 файл Proba1.txt из папки проекта:

Open App.Path & "\Proba1.txt" For Input As #1

Input #1, a1         'Чтение 1-й строки

Input #1, a2         'Чтение 2-й строки

Input #1, аЗ, a4   'Чтение 3-й строки

Close #1              'Закрыть файл 1

Print аЗ, а4

 End Sub

Вот результаты в окне Immediate:

Африка   2010

Вы видите, что собственно чтение осуществляется оператором Input. После работы с файлом его нужно закрыть оператором Close. Обратите внимание, что для того, чтобы добраться до 3-й строки, нам пришлось "зря" прочитать первые две.

Пример 3. В предыдущем примере мы еще до считывания знали, как  располагаются по строкам и внутри строк данные в файле Proba1.txt. Однако нередки случаи, когда мы не имеем об этом представления. Все, что мы знаем, - это то, что файл состоит из строк. Тем не менее, хочется прочитать данные из файла, чтобы хотя бы посмотреть на них. Для этого можно приказать Бейсику загружать каждую строку файла независимо от того, из каких данных она состоит, в переменную типа String. Вот программа, распечатывающая 3 первые строки файла Proba1.txt:

 Private Sub Command4_Click()

  Dim s1 As String             'Три переменные в оперативной памяти,

  Dim s2 As String        которые будут загружены 3

  Dim s3 As String        'первые строки файла

  Open App.Path & "\Proba1.txt" For Input As #1

Line Input #1, s1        'Чтение очередной строки файла Debug.Print s1

Line Input #1, s2        'Чтение очередной строки файла Debug.Print s2

Line Input #1, s3        'Чтение очередной строки файла Debug.Print s3

Close #1                        'Закрыть файл 1

End Sub

Загрузку очередной строки в переменную типа String выполняет
оператор
Line Input. Вот результаты в окне Immediate:     

1999 "Азия"

"Африка", 2010

Вы видите, что кавычки и запятая не исчезли, как это было в рас­печатке примера 2. Это потому, что Line Input не обращает внимания на символы, из которых состоит строка файла. Он просто загружает их подряд в строковую переменную. В нашем случае, например, строка s3 состоит из символов "Африка", 2010, включая кавычки и запятую.

Если вы хотите как-то изменить содержимое текстового файла на диске, то вам целесообразно полностью загрузить его в память, изме­нить его там, как вам надо, а затем то, что получилось, целиком запи­сать обратно в файл.

Пример 4. Файл f состоит из 10 строк. Дописать в конец каждой строки восклицательный знак.

Программа:

 Dim s(1 То 10) As String

Private Sub Command 1_Click()

'Загружаем файл в память:    

Open App.Path & "\f.txt" For Input As #1

 For i = 1 To 10

Line Input #1, s(i)      'Чтение очередной строки файла Next Close #1

                                        'Преобразовываем строки в памяти:

   Fori = 1 То 10

       s(i) = s(i) &"!"               'Добавляем восклицательный знак в каждую строку

       Next

'Записываем преобразованные строки в файл:

      Open App.Path & "\f.txt" For Output As #1

        For i = 1 To 10

Print #1, s(i)  'Запись очередной строки в файл

Next

   Close #1  

End Sub

Вы видите, что в этой программе запись осуществляется операто­ром Print, а не Write. Иначе бы строки в результирующем файле брались в кавычки, как это было в примере 2.

Пример 5. Вам нужно прочесть все строки файла, а сколько строк в файле, вы не знаете.

Ваши действия

 Do While Not E0F(1) 'Выполняй, пока НЕ наступил КОНЕЦ ФАЙЛА 1

Line Input #1, s(i)

i = i + 1

Loop

___________    Действия над файлами________

Оператор

Смысл

FileCopy "c:\temp\1.txt", "c:\temp\2.txt"

Оператор FileCopy копирует файлы. У него 2 параметра: первый - адрес копируемого файла, второй - адрес файла, в который производится копирование. В данном примере файл 1.txt копируется в свою же папку под именем 2.txt

FileCopy "c:\temp\1.txt", "c:\temp\222\4.txt"

Файл 1.txt копируется в папку c:\temp\222 под именем 4.txt

Name "c:\temp\222\4.txt" As "c:\temp\222\5.txt"

Оператор Name As переименовывает и перемещает файлы и папки. Два его параметра имеют тот же смысл, что и у оператора FileCopy. В данном примере файл 4.txt переименовывается в 5.txt и остается в своей папке

Name "c:\temp\222\5.txt" As "c:\temp\5.txt"

Файл 5.txt перемещается в папку temp

Kill "c:\temp\5.txt"

Оператор Kill уничтожает файл

Действия над папками

Оператор

Смысл

Name "c:\temp\333" As "c:\temp\444"

Папка 333 переименовывается в 444

Name "c:\temp\666" As "c:\temp\222\666"

Папка 666 перемещается вместе со всем своим содержимым внутрь папки 222

MkDir "c:\temp\888"

Создается пустая папка 888

RmDir "c:\temp\888"

Уничтожается пустая папка 888

В программировании широко используется понятие текущей пап­ки. В данный момент времени текущая папка может быть только од­на. Назначьте текущей папку, с файлами которой вы в данный момент работаете, и запись адресов в операторах существенно сократится. Например, работая в папке c:\temp\999, вы вместо того, чтобы все время писать операторы вида

FileCopy "c:\temp\999\22.txt", "c:\temp\999\44.txt" один раз задаете текущую папку, вот так:

ChDir "c:\temp\999" а затем уже все время пишете операторы такого вида:

FileCopy "22.txt", "44.txt" Функция CurDir позволяет вам узнать, какая папка в настоящий мо­мент является текущей. Для этого вам достаточно выполнить оператор Debug.Print CurDir


 

 

 

Задать вопрос.

 

 ТЕСТ   Практическое задание

Hosted by uCoz